home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 441 / dlibs12 / getln.c < prev    next >
C/C++ Source or Header  |  1990-11-23  |  793b  |  47 lines

  1. #define    KEY_UNDO    0x1B        /* escape */
  2. #define    KEY_CR        0x0D
  3. #define    KEY_LF        0x0A
  4. #define    KEY_BS        0x08
  5. #define    KEY_DEL        0x7F
  6.  
  7. char *getln(ip, get, put, buffer, limit)
  8.     char *ip;
  9.     register int (*get)();
  10.     register int (*put)();
  11.     char *buffer;
  12.     register int limit;
  13.     {
  14.     register char *bp = buffer;
  15.     register int c, i = 0;
  16.  
  17.     for(;;)
  18.         {
  19.         c = (*get)(ip) & 0xFF;
  20.         if(c == KEY_UNDO)
  21.             {
  22.             *(bp = buffer) = '\0';
  23.             i = 0;
  24.             break;
  25.             }
  26.         else if((c == KEY_CR) || (c == KEY_LF))
  27.             {
  28.             *bp = '\0';
  29.             break;
  30.             }
  31.         else if(((c == KEY_BS) || (c == KEY_DEL)) && (bp != buffer))
  32.             {
  33.             --bp;
  34.             (*put)('\b');
  35.             (*put)(' ');
  36.             (*put)('\b');
  37.             --i;
  38.             }
  39.         else if((c >= ' ') && (i < limit))
  40.             {
  41.             (*put)(*bp++ = c);
  42.             ++i;
  43.             }
  44.         }
  45.     return(buffer);
  46.     }
  47.